home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / comm / term / term_47a_pch.lha / Source / term-4.7a / SerialPanel.c < prev    next >
C/C++ Source or Header  |  1996-11-05  |  17KB  |  703 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  17.             GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  18.             GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_SATISFY_ODU,GAD_USE_OWNDEVUNIT,GAD_RELEASE_WHEN_ONLINE,
  19.             GAD_RELEASE_WHEN_DIALING,GAD_NO_ODU_IF_SHARED,GAD_USE,GAD_CANCEL,
  20.             GAD_PAGER,GAD_PAGEGROUP,GAD_DIRECT_CONNECTION
  21.         };
  22.  
  23. STATIC LONG Sizes[] =
  24. {
  25.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  26. };
  27.  
  28. STATIC LONG SAVE_DS STACKARGS
  29. ShowSerialSize(struct Gadget *UnusedGadget,LONG Level)
  30. {
  31.     return(Sizes[Level]);
  32. }
  33.  
  34. STATIC LONG SAVE_DS ASM
  35. RateHookFunc(REG(a0) struct Hook *UnusedHook,REG(a2) LONG Current,REG(a1) LONG Command)
  36. {
  37.     LONG Index;
  38.  
  39.     if(Current < BaudRates[0])
  40.         Current = BaudRates[Index = 0];
  41.     else
  42.     {
  43.         if(Current > BaudRates[NumBaudRates - 1])
  44.             Current = BaudRates[Index = NumBaudRates - 1];
  45.         else
  46.         {
  47.             LONG i;
  48.  
  49.             Index = -1;
  50.  
  51.             for(i = 0 ; i < NumBaudRates ; i++)
  52.             {
  53.                 if(Current == BaudRates[i])
  54.                 {
  55.                     switch(Command)
  56.                     {
  57.                         case INCREMENTERMSG_Decrement:
  58.  
  59.                             if(i > 0)
  60.                                 return(BaudRates[i - 1]);
  61.                             else
  62.                                 return(Current);
  63.  
  64.                         case INCREMENTERMSG_Increment:
  65.  
  66.                             if(i < NumBaudRates - 1)
  67.                                 return(BaudRates[i + 1]);
  68.                             else
  69.                                 return(Current);
  70.  
  71.                         default:
  72.  
  73.                             return(Current);
  74.                     }
  75.                 }
  76.             }
  77.  
  78.             if(Index == -1)
  79.             {
  80.                 if(Command == INCREMENTERMSG_Decrement)
  81.                 {
  82.                     for(i = 0 ; i < NumBaudRates ; i++)
  83.                     {
  84.                         if(BaudRates[i] <= Current)
  85.                             Index = i;
  86.                     }
  87.  
  88.                     if(BaudRates[Index] < Current || !Index)
  89.                         return(BaudRates[Index]);
  90.                     else
  91.                         return(BaudRates[Index - 1]);
  92.                 }
  93.                 else
  94.                 {
  95.                     if(Command == INCREMENTERMSG_Initial)
  96.                         return(Current);
  97.  
  98.                     for(i = NumBaudRates - 1 ; i >= 0 ; i--)
  99.                     {
  100.                         if(BaudRates[i] >= Current)
  101.                             Index = i;
  102.                     }
  103.  
  104.                     if(Index == -1)
  105.                         return(Current);
  106.  
  107.                     if(BaudRates[Index] > Current || Index == NumBaudRates - 1)
  108.                         return(BaudRates[Index]);
  109.                     else
  110.                         return(BaudRates[Index + 1]);
  111.                 }
  112.             }
  113.         }
  114.     }
  115.  
  116.     if(Index == -1 || (Command != INCREMENTERMSG_Decrement && Command != INCREMENTERMSG_Increment))
  117.         return(Current);
  118.     else
  119.     {
  120.         if(Command == INCREMENTERMSG_Decrement)
  121.         {
  122.             if(Index > 0)
  123.                 return(BaudRates[Index - 1]);
  124.             else
  125.                 return(BaudRates[Index]);
  126.         }
  127.         else
  128.         {
  129.             if(Index < NumBaudRates - 1)
  130.                 return(BaudRates[Index + 1]);
  131.             else
  132.                 return(BaudRates[Index]);
  133.         }
  134.     }
  135. }
  136.  
  137. BOOL
  138. SerialPanel(struct Window *Parent,struct Configuration *LocalConfig)
  139. {
  140.     STATIC struct Hook IncrementerHook;
  141.  
  142.     STATIC LONG PageTitleID[5] =
  143.     {
  144.         MSG_V36_0171,
  145.         MSG_V36_0179,
  146.         MSG_V36_0176,
  147.         MSG_ODU_SUPPORT_TXT,
  148.         -1
  149.     };
  150.  
  151.     STATIC BYTE InitialPage = 0;
  152.  
  153.     LayoutHandle *Handle;
  154.     STRPTR PageLabels[5];
  155.     BOOL UseIt;
  156.  
  157.     UseIt = FALSE;
  158.  
  159.     InitHook(&IncrementerHook,(HOOKFUNC)RateHookFunc,NULL);
  160.  
  161.     memset(PageLabels,0,sizeof(PageLabels));
  162.  
  163.     LocalizeStringTable(PageLabels,PageTitleID);
  164.  
  165.     if(!OwnDevUnitBase)
  166.     {
  167.         PageLabels[3] = NULL;
  168.  
  169.         if(InitialPage >= 3)
  170.             InitialPage = 2;
  171.     }
  172.  
  173.     SaveConfig(LocalConfig,PrivateConfig);
  174.  
  175.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  176.         LAHN_LocaleHook,    &LocaleHook,
  177.         LAHN_ExitFlush,        FALSE,
  178.     TAG_DONE))
  179.     {
  180.         struct Window *PanelWindow;
  181.         LONG Size,Quantum,i;
  182.  
  183.         for(i = 4 ; i < NUM_ELEMENTS(Sizes) ; i++)
  184.         {
  185.             if(Sizes[i] <= PrivateConfig->SerialConfig->SerialBufferSize)
  186.                 Size = i;
  187.         }
  188.  
  189.         for(i = 0 ; i < NUM_ELEMENTS(Sizes) ; i++)
  190.         {
  191.             if(Sizes[i] <= PrivateConfig->SerialConfig->Quantum)
  192.                 Quantum = i;
  193.         }
  194.  
  195.         if(PrivateConfig->SerialConfig->HighSpeed)
  196.         {
  197.             PrivateConfig->SerialConfig->BitsPerChar    = 8;
  198.             PrivateConfig->SerialConfig->StopBits        = 1;
  199.             PrivateConfig->SerialConfig->Parity            = PARITY_NONE;
  200.         }
  201.  
  202.         LT_New(Handle,
  203.             LA_Type,VERTICAL_KIND,
  204.         TAG_DONE);
  205.         {
  206.             LT_New(Handle,
  207.                 LA_Type,VERTICAL_KIND,
  208.             TAG_DONE);
  209.             {
  210.                 LT_New(Handle,
  211.                     LA_Type,        TAB_KIND,
  212.                     LA_ID,            GAD_PAGER,
  213.                     LA_LabelID,        MSG_XFER_PAGE_TXT,
  214.                     GTCY_Labels,    PageLabels,
  215.                     LACY_AutoPageID,GAD_PAGEGROUP,
  216.                     LACY_TabKey,    TRUE,
  217.                     LA_BYTE,        &InitialPage,
  218.                     LATB_FullWidth,    TRUE,
  219.                 TAG_DONE);
  220.  
  221.                 LT_EndGroup(Handle);
  222.             }
  223.  
  224.             LT_New(Handle,
  225.                 LA_Type,        VERTICAL_KIND,
  226.                 LA_ID,            GAD_PAGEGROUP,
  227.                 LAGR_ActivePage,InitialPage,
  228.             TAG_DONE);
  229.             {
  230.                 LT_New(Handle,
  231.                     LA_Type,VERTICAL_KIND,
  232.                 TAG_DONE);
  233.                 {
  234.                     LT_New(Handle,
  235.                         LA_Type,                INTEGER_KIND,
  236.                         LA_LabelID,                MSG_SERIALPANEL_BAUD_RATE_GAD,
  237.                         LA_LONG,                &PrivateConfig->SerialConfig->BaudRate,
  238.                         LA_ID,                    GAD_BAUD,
  239.                         GTIN_MaxChars,            8,
  240.                         LAIN_Min,                0,
  241.                         LAIN_UseIncrementers,    TRUE,
  242.                         LAIN_IncrementerHook,    &IncrementerHook,
  243.                     TAG_DONE);
  244.  
  245.                     LT_New(Handle,
  246.                         LA_Type,                SliderType,
  247.                         LA_ID,                    GAD_DATABITS,
  248.                         LA_LabelID,                MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  249.                         LA_BYTE,                &PrivateConfig->SerialConfig->BitsPerChar,
  250.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  251.                         GTSL_Min,                7,
  252.                         GTSL_Max,                8,
  253.                     TAG_DONE);
  254.  
  255.                     LT_New(Handle,
  256.                         LA_Type,                CYCLE_KIND,
  257.                         LA_ID,                    GAD_PARITY,
  258.                         LA_LabelID,                MSG_SERIALPANEL_PARITY_GAD,
  259.                         LA_BYTE,                &PrivateConfig->SerialConfig->Parity,
  260.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  261.                         LACY_FirstLabel,        MSG_SERIALPANEL_NO_PARITY_TXT,
  262.                         LACY_LastLabel,            MSG_SERIALPANEL_SPACE_TXT,
  263.                     TAG_DONE);
  264.  
  265.                     LT_New(Handle,
  266.                         LA_Type,                SliderType,
  267.                         LA_ID,                    GAD_STOPBITS,
  268.                         LA_LabelID,                MSG_SERIALPANEL_STOP_BITS_GAD,
  269.                         LA_BYTE,                &PrivateConfig->SerialConfig->StopBits,
  270.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  271.                         GTSL_Min,                1,
  272.                         GTSL_Max,                2,
  273.                     TAG_DONE);
  274.  
  275.                     LT_New(Handle,
  276.                         LA_Type,                CYCLE_KIND,
  277.                         LA_LabelID,                MSG_SERIALPANEL_HANDSHAKING_GAD,
  278.                         LA_BYTE,                &PrivateConfig->SerialConfig->HandshakingProtocol,
  279.                         LACY_FirstLabel,        MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  280.                         LACY_LastLabel,            MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  281.                     TAG_DONE);
  282.  
  283.                     LT_New(Handle,
  284.                         LA_Type,                CHECKBOX_KIND,
  285.                         LA_LabelID,                MSG_SERIALPANEL_LOCAL_ECHO_GAD,
  286.                         LA_BYTE,                &PrivateConfig->SerialConfig->Duplex,
  287.                     TAG_DONE);
  288.  
  289.                     LT_New(Handle,
  290.                         LA_Type,                SliderType,
  291.                         LA_LabelID,                MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  292.                         LA_LONG,                &Size,
  293.                         GTSL_Min,                4,
  294.                         GTSL_Max,                NUM_ELEMENTS(Sizes) - 1,
  295.                         GTSL_DispFunc,            ShowSerialSize,
  296.                         GTSL_LevelFormat,        LocaleBase ? "%7lD" : "%7ld",
  297.                     TAG_DONE);
  298.  
  299.                     LT_New(Handle,
  300.                         LA_Type,                INTEGER_KIND,
  301.                         LA_LabelID,                MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  302.                         LA_LONG,                &PrivateConfig->SerialConfig->BreakLength,
  303.                         GTIN_MaxChars,            8,
  304.                     TAG_DONE);
  305.  
  306.                     LT_New(Handle,
  307.                         LA_Type,                CHECKBOX_KIND,
  308.                         LA_LabelID,                MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  309.                         LA_BYTE,                &PrivateConfig->SerialConfig->HighSpeed,
  310.                         LA_ID,                    GAD_HIGHSPEED,
  311.                     TAG_DONE);
  312.  
  313.                     LT_EndGroup(Handle);
  314.                 }
  315.  
  316.                 LT_New(Handle,
  317.                     LA_Type,VERTICAL_KIND,
  318.                 TAG_DONE);
  319.                 {
  320.                     LT_New(Handle,
  321.                         LA_Type,                STRING_KIND,
  322.                         LA_LabelID,                MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  323.                         LA_Chars,                20,
  324.                         LA_STRPTR,                PrivateConfig->SerialConfig->SerialDevice,
  325.                         GTST_MaxChars,            sizeof(PrivateConfig->SerialConfig->SerialDevice) - 1,
  326.                         LAST_Picker,            TRUE,
  327.                         LA_ID,                    GAD_DEVICE,
  328.                     TAG_DONE);
  329.  
  330.                     LT_New(Handle,
  331.                         LA_Type,                INTEGER_KIND,
  332.                         LA_LabelID,                MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  333.                         LA_LONG,                &PrivateConfig->SerialConfig->UnitNumber,
  334.                         LA_ID,                    GAD_UNIT,
  335.                         LAIN_UseIncrementers,    TRUE,
  336.                         GTIN_MaxChars,            8,
  337.                     TAG_DONE);
  338.  
  339.                     LT_EndGroup(Handle);
  340.                 }
  341.  
  342.                 LT_New(Handle,
  343.                     LA_Type,VERTICAL_KIND,
  344.                 TAG_DONE);
  345.                 {
  346.                     LT_New(Handle,
  347.                         LA_Type,            CHECKBOX_KIND,
  348.                         LA_LabelID,            MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  349.                         LA_BYTE,            &PrivateConfig->SerialConfig->StripBit8,
  350.                     TAG_DONE);
  351.  
  352.                     LT_New(Handle,
  353.                         LA_Type,            CHECKBOX_KIND,
  354.                         LA_LabelID,            MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  355.                         LA_BYTE,            &PrivateConfig->SerialConfig->Shared,
  356.                         LA_ID,                GAD_SHARED,
  357.                     TAG_DONE);
  358.  
  359.                     LT_New(Handle,
  360.                         LA_Type,            CHECKBOX_KIND,
  361.                         LA_LabelID,            MSG_SERIALPANEL_XON_XOFF_GAD,
  362.                         LA_BYTE,            &PrivateConfig->SerialConfig->xONxOFF,
  363.                     TAG_DONE);
  364.  
  365.                     LT_New(Handle,
  366.                         LA_Type,            CHECKBOX_KIND,
  367.                         LA_LabelID,            MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  368.                         LA_BYTE,            &PrivateConfig->SerialConfig->PassThrough,
  369.                     TAG_DONE);
  370.  
  371.                     LT_New(Handle,
  372.                         LA_Type,            CHECKBOX_KIND,
  373.                         LA_LabelID,            MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  374.                         LA_BYTE,            &PrivateConfig->SerialConfig->CheckCarrier,
  375.                         GA_Disabled,        PrivateConfig->SerialConfig->DirectConnection,
  376.                         LA_ID,                GAD_CHECK_CARRIER,
  377.                     TAG_DONE);
  378.  
  379.                     LT_New(Handle,
  380.                         LA_Type,            CHECKBOX_KIND,
  381.                         LA_LabelID,            MSG_DIRECT_CONNECTION_GAD,
  382.                         LA_BYTE,            &PrivateConfig->SerialConfig->DirectConnection,
  383.                         LA_ID,                GAD_DIRECT_CONNECTION,
  384.                     TAG_DONE);
  385.  
  386.                     LT_New(Handle,
  387.                         LA_Type,            SliderType,
  388.                         LA_LabelID,            MSG_SERIALPANEL_QUANTUM_GAD,
  389.                         LA_LONG,            &Quantum,
  390.                         LA_Chars,            6,
  391.                         GTSL_Min,            0,
  392.                         GTSL_Max,            NUM_ELEMENTS(Sizes) - 1,
  393.                         GTSL_Level,            Quantum,
  394.                         GTSL_DispFunc,        ShowSerialSize,
  395.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  396.                     TAG_DONE);
  397.  
  398.                     LT_EndGroup(Handle);
  399.                 }
  400.  
  401.                 LT_New(Handle,
  402.                     LA_Type,VERTICAL_KIND,
  403.                 TAG_DONE);
  404.                 {
  405.                     LT_New(Handle,
  406.                         LA_Type,VERTICAL_KIND,
  407.                     TAG_DONE);
  408.                     {
  409.                         LT_New(Handle,
  410.                             LA_Type,            CHECKBOX_KIND,
  411.                             LA_LabelID,            MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  412.                             LA_BYTE,            &PrivateConfig->SerialConfig->UseOwnDevUnit,
  413.                             LA_ID,                GAD_USE_OWNDEVUNIT,
  414.                             LA_LabelPlace,        PLACE_Right,
  415.                         TAG_DONE);
  416.  
  417.                         LT_New(Handle,
  418.                             LA_Type,            CHECKBOX_KIND,
  419.                             LA_LabelID,            MSG_DO_NOT_USE_IF_DEVICE_IS_IN_SHARED_MODE_TXT,
  420.                             LA_BYTE,            &PrivateConfig->SerialConfig->NoODUIfShared,
  421.                             LA_ID,                GAD_NO_ODU_IF_SHARED,
  422.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  423.                             LA_LabelPlace,        PLACE_Right,
  424.                         TAG_DONE);
  425.  
  426.                         LT_New(Handle,
  427.                             LA_Type,            CHECKBOX_KIND,
  428.                             LA_LabelID,            MSG_RELEASE_DEVICE_WHEN_ONLINE_TXT,
  429.                             LA_BYTE,            &PrivateConfig->SerialConfig->ReleaseODUWhenOnline,
  430.                             LA_ID,                GAD_RELEASE_WHEN_ONLINE,
  431.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  432.                             LA_ExtraSpace,        TRUE,
  433.                             LA_LabelPlace,        PLACE_Right,
  434.                         TAG_DONE);
  435.  
  436.                         LT_New(Handle,
  437.                             LA_Type,            CHECKBOX_KIND,
  438.                             LA_LabelID,            MSG_RELEASE_DEVICE_WHEN_DIALING_TXT,
  439.                             LA_BYTE,            &PrivateConfig->SerialConfig->ReleaseODUWhenDialing,
  440.                             LA_ID,                GAD_RELEASE_WHEN_DIALING,
  441.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  442.                             LA_LabelPlace,        PLACE_Right,
  443.                         TAG_DONE);
  444.  
  445.                         LT_New(Handle,
  446.                             LA_Type,            MX_KIND,
  447.                             LA_LabelID,            MSG_SATISFY_ODU_TXT,
  448.                             LA_BYTE,            &PrivateConfig->SerialConfig->SatisfyODURequests,
  449.                             LA_ID,                GAD_SATISFY_ODU,
  450.                             LACY_FirstLabel,    MSG_SATISFY_ODU_MODE1_TXT,
  451.                             LACY_LastLabel,        MSG_SATISFY_ODU_MODE3_TXT,
  452.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  453.                             LA_ExtraSpace,        TRUE,
  454.                         TAG_DONE);
  455.  
  456.                         LT_EndGroup(Handle);
  457.                     }
  458.  
  459.                     LT_EndGroup(Handle);
  460.                 }
  461.  
  462.                 LT_EndGroup(Handle);
  463.             }
  464.  
  465.             LT_New(Handle,
  466.                 LA_Type,VERTICAL_KIND,
  467.             TAG_DONE);
  468.             {
  469.                 LT_New(Handle,
  470.                     LA_Type,        XBAR_KIND,
  471.                     LAXB_FullSize,    TRUE,
  472.                 TAG_DONE);
  473.  
  474.                 LT_EndGroup(Handle);
  475.             }
  476.  
  477.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  478.                 LAGR_SameSize,    TRUE,
  479.                 LAGR_Spread,    TRUE,
  480.             TAG_DONE);
  481.             {
  482.                 LT_New(Handle,
  483.                     LA_Type,        BUTTON_KIND,
  484.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  485.                     LA_ID,            GAD_USE,
  486.                     LABT_ReturnKey,    TRUE,
  487.                     LABT_ExtraFat,    TRUE,
  488.                 TAG_DONE);
  489.  
  490.                 LT_New(Handle,
  491.                     LA_Type,        BUTTON_KIND,
  492.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  493.                     LA_ID,            GAD_CANCEL,
  494.                     LABT_EscKey,    TRUE,
  495.                     LABT_ExtraFat,    TRUE,
  496.                 TAG_DONE);
  497.  
  498.                 LT_EndGroup(Handle);
  499.             }
  500.  
  501.             LT_EndGroup(Handle);
  502.         }
  503.  
  504.         if(PanelWindow = LT_Build(Handle,
  505.             LAWN_TitleID,        MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT,
  506.             LAWN_HelpHook,        &GuideHook,
  507.             LAWN_Parent,        Parent,
  508.             WA_DepthGadget,        TRUE,
  509.             WA_DragBar,            TRUE,
  510.             WA_RMBTrap,            TRUE,
  511.             WA_Activate,        TRUE,
  512.             WA_SimpleRefresh,    TRUE,
  513.         TAG_DONE))
  514.         {
  515.             struct IntuiMessage    *Message;
  516.             struct Gadget *MsgGadget;
  517.             ULONG MsgClass;
  518.             UWORD MsgCode;
  519.             BOOL Done;
  520.  
  521.             GuideContext(CONTEXT_SERIAL);
  522.  
  523.             PushWindow(PanelWindow);
  524.  
  525.             LT_ShowWindow(Handle,TRUE);
  526.  
  527.             Done = FALSE;
  528.  
  529.             do
  530.             {
  531.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  532.                     break;
  533.  
  534.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  535.                 {
  536.                     MsgClass    = Message->Class;
  537.                     MsgCode        = Message->Code;
  538.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  539.  
  540.                     LT_ReplyIMsg(Message);
  541.  
  542.                     if(MsgClass == IDCMP_GADGETUP)
  543.                     {
  544.                         switch(MsgGadget->GadgetID)
  545.                         {
  546.                             case GAD_USE_OWNDEVUNIT:
  547.  
  548.                                 LT_SetAttributes(Handle,GAD_SATISFY_ODU,
  549.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  550.                                 TAG_DONE);
  551.  
  552.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_ONLINE,
  553.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  554.                                 TAG_DONE);
  555.  
  556.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_DIALING,
  557.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  558.                                 TAG_DONE);
  559.  
  560.                                 LT_SetAttributes(Handle,GAD_NO_ODU_IF_SHARED,
  561.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  562.                                 TAG_DONE);
  563.  
  564.                                 break;
  565.  
  566.                             case GAD_HIGHSPEED:
  567.  
  568.                                 if(MsgCode)
  569.                                 {
  570.                                     LT_SetAttributes(Handle,GAD_PARITY,
  571.                                         GA_Disabled,    TRUE,
  572.                                         GTCY_Active,    PARITY_NONE,
  573.                                     TAG_DONE);
  574.  
  575.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  576.                                         GA_Disabled,    TRUE,
  577.                                         GTCY_Active,    0,
  578.                                     TAG_DONE);
  579.  
  580.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  581.                                         GA_Disabled,    TRUE,
  582.                                         GTCY_Active,    1,
  583.                                     TAG_DONE);
  584.                                 }
  585.                                 else
  586.                                 {
  587.                                     LT_SetAttributes(Handle,GAD_PARITY,
  588.                                         GA_Disabled,    FALSE,
  589.                                     TAG_DONE);
  590.  
  591.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  592.                                         GA_Disabled,    FALSE,
  593.                                     TAG_DONE);
  594.  
  595.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  596.                                         GA_Disabled,    FALSE,
  597.                                     TAG_DONE);
  598.                                 }
  599.  
  600.                                 break;
  601.  
  602.                             case GAD_DIRECT_CONNECTION:
  603.  
  604.                                 LT_SetAttributes(Handle,GAD_CHECK_CARRIER,
  605.                                     GA_Disabled,    MsgCode,
  606.                                 TAG_DONE);
  607.  
  608.                                 break;
  609.  
  610.                             case GAD_USE:
  611.  
  612.                                 LT_UpdateStrings(Handle);
  613.  
  614.                                 PrivateConfig->SerialConfig->SerialBufferSize    = Sizes[Size];
  615.                                 PrivateConfig->SerialConfig->Quantum            = Sizes[Quantum];
  616.  
  617.                                 UseIt = Done = TRUE;
  618.  
  619.                                 break;
  620.  
  621.                             case GAD_CANCEL:
  622.  
  623.                                 Done = TRUE;
  624.                                 break;
  625.  
  626.                             case GAD_DEVICE:
  627.  
  628.                                 FindLibDev(PanelWindow,LT_GetString(Handle,MsgGadget->GadgetID),NT_DEVICE,NULL);
  629.                                 break;
  630.                         }
  631.                     }
  632.  
  633.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget->GadgetID == GAD_DEVICE)
  634.                     {
  635.                         UBYTE LocalBuffer[MAX_FILENAME_LENGTH],DummyBuffer[MAX_FILENAME_LENGTH];
  636.  
  637.                         LT_LockWindow(PanelWindow);
  638.  
  639.                         strcpy(DummyBuffer,LT_GetString(Handle,GAD_DEVICE));
  640.                         strcpy(LocalBuffer,DummyBuffer);
  641.  
  642.                         if(PickFile(PanelWindow,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),LocalBuffer,NT_DEVICE))
  643.                         {
  644.                             if(Stricmp(DummyBuffer,LocalBuffer))
  645.                             {
  646.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,LocalBuffer,TAG_DONE);
  647.  
  648.                                 FindLibDev(PanelWindow,LocalBuffer,NT_DEVICE,NULL);
  649.                             }
  650.                         }
  651.  
  652.                         LT_UnlockWindow(PanelWindow);
  653.  
  654.                         LT_ShowWindow(Handle,TRUE);
  655.                     }
  656.                 }
  657.             }
  658.             while(!Done);
  659.  
  660.             PopWindow();
  661.         }
  662.  
  663.         LT_DeleteHandle(Handle);
  664.     }
  665.  
  666.     if(UseIt)
  667.     {
  668.         if(Config->MiscConfig->ProtectiveMode)
  669.         {
  670.             if(PrivateConfig->SerialConfig->BaudRate >= 4800 && PrivateConfig->SerialConfig->HandshakingProtocol == HANDSHAKING_NONE && !PrivateConfig->SerialConfig->DirectConnection)
  671.             {
  672.                 if(ShowRequest(Window,LocaleString(MSG_NO_RTSCTS_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),PrivateConfig->SerialConfig->BaudRate))
  673.                     PrivateConfig->SerialConfig->HandshakingProtocol = HANDSHAKING_RTSCTS_DSR;
  674.             }
  675.         }
  676.  
  677.             /* Is the device driver closed up and is the main
  678.              * program making the call?
  679.              */
  680.  
  681.         if(LocalConfig == Config && !ReadRequest)
  682.         {
  683.                 /* Is the serial configuration any different?
  684.                  * If not, zap the serial device name in the
  685.                  * alternate buffer to force the driver to
  686.                  * get reopened.
  687.                  */
  688.  
  689.             if(!CompareConfigEntries(Config->SerialConfig,PrivateConfig->SerialConfig,PREF_SERIAL))
  690.                 Config->SerialConfig->SerialDevice[0] = 0;
  691.         }
  692.     }
  693.  
  694.         /* The edited settings are now in PrivateConfig */
  695.  
  696.     if(UseIt)
  697.         SwapConfig(LocalConfig,PrivateConfig);
  698.     else
  699.         SaveConfig(LocalConfig,PrivateConfig);
  700.  
  701.     return(UseIt);
  702. }
  703.